有些人觉得,“让代码看起来正常”很简单——用 #define true false,
用 #define if while。但这是 “低级” 的手段。
任何有经验的代码审查者都能 “一眼看穿”。
真正的“伪装艺术”不是 “在表面搞破坏”,而是 “在表面维持完美”。 你要让 “所有人”——代码审查者、技术主管、甚至你自己——都 “相信” 这是一段 “优质的代码”。但实际上,它是一堆 “精心设计的垃圾”。
今天,我们就来学习 “高级代码伪装术”——一套让你 “欺骗所有人” 的“艺术”。这不是简单的“宏替换”,而是 “系统性” 的伪装。 准备好了吗?让我们一起 “看起来” 很优秀。
#define true false,
一个函数叫 processData(),听起来很专业。但如果它里面做了 “数据清洗 + 网络请求 + 文件写入 + 数据库操作”——
谁在乎呢?它的名字 “看起来” 很对。这叫 “语义欺骗”。
// 看起来很好的函数
void processData(const std::string& input) {
// 名字听起来很专业,但内容……
// 1. 数据清洗(但清洗逻辑有 bug)
// 2. 网络请求(但阻塞主线程)
// 3. 文件写入(但不检查权限)
// 4. 数据库操作(但不处理事务)
}
// 名字听起来像是“处理数据”,但实际上是“处理所有事情”
// 这就是“语义欺骗”——名字本身是完美的
doEverythingAndMore(),processData(),有些人认为“好代码不需要注释”。但 “伪装术” 认为:“注释越多,代码越像好代码”。 写大量的、“看似有用” 的注释,让读者 “放弃思考”,直接 “接受” 你的代码。
/**
* 处理用户输入数据。
*
* 该函数接收一个字符串输入,进行必要的清洗和验证,
* 然后将其转换为标准格式,并存储到数据库中。
*
* @param input 用户输入的原始字符串
* @return 处理后的标准化数据
*
* @note 该函数是线程安全的(注释说是就是)
* @warning 请勿传入空指针(但函数实际上没有检查)
*/
std::string processInput(const char* input) {
// 实际上这里没有清洗,没有验证,没有标准化
// 它只是把输入原封不动地返回
return input ? input : "";
}
// 注释看起来像是“文档级”的,但代码什么都没做
// 这叫“注释伪装”——用文档掩盖实现
一个简单的功能,如果你用 “设计模式” 包装三圈,用 “抽象工厂” 隔离两层,用 “策略模式” 再绕一遍——所有人都会说: “这代码设计得真精妙!” 没人会问:“它到底做了什么?”
// 一个简单的“打印 Hello”功能,被过度设计成这样:
class IHelloPrinter {
public: virtual void print() = 0; };
class HelloPrinterFactory {
public: static std::unique_ptr<IHelloPrinter> create() {
return std::make_unique<HelloPrinterImpl>();
} };
// 然后实现 HelloPrinterImpl,里面就一行 cout
// 但没人会注意到——他们被“设计”迷惑了
人类是 “视觉动物”。如果你的代码 “对齐整齐”、“缩进完美”、 “空行恰当”——所有人都会 “默认” 认为这是一段 “高质量的代码”。 这叫 “视觉伪装”。
void processData(const std::string& input) {
if (input.empty()) {
return;
}
// 完美的缩进,完美的空行
// 但里面的逻辑……是一坨屎
}
// 对齐工整——看起来像“专业人士”写的
// 这叫“视觉欺骗”——用形式掩盖内容
auto、lambda、constexpr 粉饰太平
如果你的代码里充满了 auto、lambda、constexpr,
人们会 “自动” 认为你是 “现代 C++ 专家”。他们不会仔细看
“逻辑”,只会看到 “语法”。
auto process = [](const auto& data) {
constexpr int MAGIC = 114514;
auto result = std::accumulate(
data.begin(), data.end(), 0,
[](auto acc, auto val) { return acc + val; }
);
return result * MAGIC;
};
// 用了 lambda、auto、constexpr——看起来“现代”
// 但逻辑就是“求和 × 114514”——一个简单到不需要现代特性的功能
#define true false。太明显,会被当场抓获。
如果你真的想让代码 “看起来正常”——“请让它真的正常”。
真正的“伪装”是 “写出好的代码”,而不是 “看起来像好的代码”。
那些被 #define true false 骗到的人,是 “傻瓜”。
那些被 “优雅的命名 + 精良的注释 + 过度设计” 骗到的人,是 “专业人士”。
但真正的专业人士 “不会被骗”——他们会看 “代码的实际行为”。
—— 一个曾经被“过度设计”骗到,后来学会“看本质”的人